blktap2: human readable output for tapdisk2 creation problems
authorKeir Fraser <keir.fraser@citrix.com>
Wed, 3 Jun 2009 10:10:07 +0000 (11:10 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Wed, 3 Jun 2009 10:10:07 +0000 (11:10 +0100)
This patch fixes the "file object has no attribute find" failure
we've been seeing when starting blktap2 devices and adds more
meaningful error output to conditions where the tapdisk2 process is
unable to create a blktap2 device.

Signed-off-by: Dutch Meyer <dmeyer@cs.ubc.ca>
tools/python/xen/xend/server/BlktapController.py

index 682b7e1b1e2ab2ceb557c73b95e06fde5e932331..7c592932c29f8ce9510b52ca614be8f72a3525c9 100644 (file)
@@ -32,7 +32,7 @@ def doexec(args, inputtext=None):
         proc.tochild.write(inputtext)
     stdout = proc.fromchild
     stderr = proc.childerr
-    rc = proc.poll()
+    rc = proc.wait()
     return (rc,stdout,stderr)
 
 def parseDeviceString(device):
@@ -131,7 +131,16 @@ class BlktapController(BlkifController):
         cmd = [ TAPDISK_BINARY, '-n', '%s:%s' % (params, file) ]
         (rc,stdout,stderr) = doexec(cmd)
 
-        minor, device, control = parseDeviceString(stdout)
+        if rc != 0:
+            err = stderr.read();
+            out = stdout.read();
+            stdout.close();
+            stderr.close();
+            raise Exception, 'Failed to create device.\n    stdout: %s\n    stderr: %s\nCheck that target \"%s\" exists and that blktap2 driver installed in dom0.' % (out.rstrip(), err.rstrip(), file);
+
+        minor, device, control = parseDeviceString(stdout.readline())
+        stdout.close();
+        stderr.close();
 
         #modify the configuration to attach as a vbd, now that the
         #device is configured.  Then continue to create the device